var TimeList = function() {
    this._HTMLDom = null;

    // Util class
    this.mUtil = null;

    // 선택한 날짜 데이터
    this.selectDate = null;

    // 예약 분류
    this.searchReservation = 0;

    // 지역
    this.searchArea = -1;

    // 골프장 코스
    this.searchCourse = -1;

    // 지역 설정 골프장 데이터
    this.mCourseByArea = new Array();

    // 리스트 데이터

};

TimeList.prototype = {
    constructor : TimeList,
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // InterlockBooking class 에 연동요청
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /**
     * My 설정 데이터 요청
     */
    getMySetup : function() {
        var data = new Object();
        var interlockBooking = new InterlockBooking();
        var thisClass = this;

        $.mobile.showPageLoadingMsg();

        // 골프장 코스 데이터 초기화
        this.mCourseByArea = new Array();

        interlockBooking.getMySetup(data, function($data) {
            // alert("getMySetup success :: " + JSON.stringify($jsonData));
            // alert("success check :: " + objJson.checkResult($jsonData));
            if ($data != null) {
                console.log($data);
                var i = 0;
                var tempStr = "";
                while (i < $data.length) {
                    if (i != 0) {
                        tempStr += ",";
                    }
                    tempStr += $data[i].area_id + "," + $data[i].club_id

                    i++;
                }
                thisClass.mySearchArea = tempStr;
            } else {
                thisClass._HTMLDom.sel_area.find('option:eq(1)').hide();
            }

            $.mobile.hidePageLoadingMsg();

        }, function(e) {
            alert("fail :: " + JSON.stringify(e));
            $.mobile.hidePageLoadingMsg();
        });
    },
    /**
     * 실시간 예약 부킹 리스트 가져오는 연동
     */
    getRsvBookingData : function($date, $curNum, $completeFnc) {
        var thisClass = this;
        var data = new Object();
        var interlockBooking = new InterlockBooking();
        var searh = "";

        $.mobile.showPageLoadingMsg();

        data.date = $date;
        data.curPage = $curNum;
        data.search = this.setFilterArea();

        // setFilterArea 반환 값이 null 일 경우는 해당 지역의 골프장이 없기에 연동을 하지 않고 중지
        if (data.search == null) {
            $.mobile.hidePageLoadingMsg();
            return;
        }

        interlockBooking.getTimeBookingDataByDate(data, function($data, $totalCnt) {
            console.log($totalCnt);
            console.log(Math.ceil($totalCnt / 10));

            var i = 0;
            // 해당 날짜에 총 갯수 저장
            while (i < thisClass.selectDate.length) {
                if (thisClass.selectDate[i].date == $date) {
                    thisClass.selectDate[i].totalCnt = $totalCnt;
                    thisClass.selectDate[i].totalPage = Math.ceil($totalCnt / 10);
                    break;
                }
                i++;
            }

            thisClass.addListItem($date, $data);
            if ($completeFnc != null) {
                $completeFnc();
            }
            $.mobile.hidePageLoadingMsg();
        }, function(e) {
            alert("fail :: " + JSON.stringify(e));
            $.mobile.hidePageLoadingMsg();
        });
    },
    /**
     * 지역별 골프 코스 요청 연동
     */
    getGolfCourseData : function($area) {
        var data = new Object();
        var interlockBooking = new InterlockBooking();
        var thisClass = this;

        $.mobile.showPageLoadingMsg();

        // 골프장 코스 데이터 초기화
        this.mCourseByArea = new Array();

        if ($area == -1) {
            data.area = "";
        } else {
            data.area = $area;
        }

        interlockBooking.getGolfClubData(data, function($data) {
            thisClass.mCourseByArea = $data;
            // 코스 데이터를 라디오 버튼에 적용
            thisClass.setSelectBtnByCourse(thisClass.mCourseByArea);
            $.mobile.hidePageLoadingMsg();
        }, function(e) {
            alert("fail :: " + JSON.stringify(e));
            $.mobile.hidePageLoadingMsg();
        });
    },
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Method
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    setFilterArea : function() {
        var result = "";
        var area = this.searchArea;
        var club = this.searchCourse;
        var i = 0;

        // 지역 - 전체, 골프장 - 전체 선택시
        if (area == -1 && club == -1)
            return "";

        // 나의 설정
        if (this.searchArea == 0)
            return this.mySearchArea;

        // 해당 지역의 골프장 데이터가 없을 경우
        if (this.mCourseByArea == null)
            return null;

        if (area == -1) {
            result += this.mCourseByArea[club].area_id + "," + this.mCourseByArea[club].club_id;
        } else {
            if (club == -1) {
                // 골프장 전체로 되어 있을 경우
                while (i < this.mCourseByArea.length) {
                    if (i != 0) {
                        result += ",";
                    }
                    result += this.mCourseByArea[i].area_id + "," + this.mCourseByArea[i].club_id;
                    i++;
                }
            } else {
                result += this.mCourseByArea[club].area_id + "," + this.mCourseByArea[club].club_id;
            }
        }

        return result;
    },
    /**
     * 골프장 라디오 버튼 리스트 설정 함수
     */
    setSelectBtnByCourse : function($arrCourseData) {
        var select = $('#sel_course');
        var tempStr = '<option value=-1>전체</option>';
        var i = 0;

        if ($arrCourseData != null) {
            while (i < $arrCourseData.length) {
                tempStr += '<option value="' + i + '">' + $arrCourseData[i].club_name + '</option>';
                i++;
            }
        }

        select.html(tempStr);

        $("#sel_course > option[value = " + this.searchCourse + "]").attr("selected", true);
        $('#sel_course').change();

        $.mobile.hidePageLoadingMsg();

        // 분류 실시간 예약
        i = 0;
        while (i < this.selectDate.length) {
            this.getRsvBookingData(this.selectDate[i].date, this.selectDate[i].curPage, function() {

            });
            i++;
        }
    },
    /**
     * 리스트 표시 함수
     */
    addList : function($date) {
        var date = $date;
        var layer = this._HTMLDom["$layer"];
        var list = this._HTMLDom["$listview"].clone(true);
        var title = this._HTMLDom["$listtitle"].clone(true);
        var morebtn = this._HTMLDom["$more_btn"].clone(true);

        // 리스트 ID 설정
        list.attr('id', 'list_' + $date);

        // 리스트 타이틀 설정 ( 날짜 표시 )
        title.html(this.mUtil.getDateYYMMNN($date));

        // 리스트 아이템 제거
        list.empty();

        // 리스트 타이틀 추가
        list.append(title);

        // 리스트 더보기 버튼 ID 설정
        morebtn.attr('id', 'more_' + $date);

        // 리스트 더보기 버튼 추가
        list.append(morebtn);

        // 리스트를 화면에 적용
        layer.append(list);
    },
    /**
     * 리스트 항목 추가 함수
     */
    addListItem : function($date, $data) {
        var data = $data;
        var layer = this._HTMLDom["$layer"];
        var listview = layer.find("#list_" + $date);
        var listitem = this._HTMLDom["$listitem"];
        var btnmore = layer.find("#more_" + $date);
        var thisClass = this;
        var i = 0;

        if ($data == null) {
            console.log("data is null");
            return;
        }

        btnmore.remove();

        while (i < data.length) {
            var d = data[i];
            var j = 0;
            var temp = "";

            listview.append(listitem.attr('id', 'item_' + d.reserv_num).clone(true));

            var item = listview.find('#item_' + d.reserv_num);

            // 예약 신청 버튼
            var booking_view_btn = item.find("p:first > a");

            j = 0;
            // 코스 이름
            while (j < d["course_name"].length) {
                if (d["course_name"][j] != undefined)
                    temp += " " + d["course_name"][j];
                j++;
            }

            item.find("h5").html(d["club_name"] + temp);

            // 예약 신청 버튼
            if (d.status == "W") {
                booking_view_btn.click(function() {
                    var reserv_id = $(this).parent().parent().attr('id').substr(5);
                    console.log(reserv_id);
                    document.globalObj.BOOKING_DATA.bookingview.reserv_id = reserv_id;
                    document.globalObj.BOOKING_DATA.bookingview.reservation = thisClass.searchReservation;
                    document.globalObj.BOOKING_DATA.bookingview.area = thisClass.searchArea;

                    if (document.globalObj.LOGIN_DATA.isLogin) {
                        $.mobile.changePage("booking_view.html");
                    } else {
                        document.globalObj.LOGIN_DATA.loginAfterUrl = '../booking/booking_view.html';
                        $.mobile.changePage('../member/login.html');
                    }
                });
            } else {
                booking_view_btn.attr("href", "#");
            }

            // 티타임
            var tagLi = item.find("li");
            var tagEm = tagLi.eq(0).find("em");
            var tagMark = null;
            var tagP = null;
            var tempStrTime = String(d["time"]);

            tagLi.eq(0).empty();
            tagLi.eq(0).append(tagEm.clone(true));
            tagLi.eq(0).append(tempStrTime.substr(0, 2) + ":" + tempStrTime.substr(2, 2));

            // 그린피
            tagEm = tagLi.eq(1).find("em");
            tagMark = tagLi.eq(1).find("mark");
            tagLi.eq(1).empty();
            tagLi.eq(1).append(tagEm.clone(true));
            if (d["greenfee"] != undefined) {
                tagLi.eq(1).append(tagMark.clone(true));
                tagMark.html(thisClass.mUtil.getMoneyTypeNum(d["greenfee"]));
            }

            // 이벤트
            j = 0;
            tagP = tagLi.eq(2).find("div > p");
            // 그린피
            while (j < d["event"].length) {
                if (d["event"][j] == undefined || d["event"][j] == "N")
                    tagP.eq(j).hide();
                j++;

            };

            i++;
        }

        var curDate = this.getDataByDate($date);

        if (curDate.curPage < curDate.totalPage) {
            // 더보기 버튼
            listview.append(btnmore);
            btnmore.find('div:first').click(function() {
                var date = $(this).parent().attr('id').substr(5);
                var data = thisClass.getDataByDate(date);
                thisClass.getRsvBookingData(data.date, ++data.curPage, function() {

                });
            });
        }

    },
    /**
     * 날짜에 따른 selectDate 배열에서 해당 날짜의 Object를 반환
     * 없을 경우 null 을 반환
     */
    getDataByDate : function($date) {
        var i = 0;

        while (i < this.selectDate.length) {
            if (this.selectDate[i].date == $date) {
                return this.selectDate[i];
            }
            i++;
        }

        return null;
    },

    /**
     * 필요한 테이터 셋팅
     */
    setData : function($data) {
        var i = 0;
        this.selectDate = new Array();

        while (i < $data.calendar.selectDate.length) {
            this.selectDate.push({
                date : $data.calendar.selectDate[i],
                totalCnt : 0,
                curPage : 1,
                totalPage : 1
            });
            i++;
        }

        this.searchReservation = $data.category.searchReservation;
        this.searchArea = $data.category.searchArea;
        this.searchCourse = $data.category.searchCourse;

    },
    /**
     * 데이터 Global Object에 저장
     */
    saveData : function() {
        document.globalObj.BOOKING_DATA.category.searchReservation = this.searchReservation;
        document.globalObj.BOOKING_DATA.category.searchArea = this.searchArea;
        document.globalObj.BOOKING_DATA.category.searchCourse = this.searchCourse;
    },
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Initialize
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    onPageShow : function() {
        console.log("TimeList onPageBeforeShow!");
        var thisClass = this;

        this.mUtil = document.globalObj.util;

        // 데이터 초기화
        mListData = new Object();

        this.setData(document.globalObj.BOOKING_DATA);

        var $layer = $("#time_booking_list");
        this._HTMLDom = {
            "$layer" : $layer,
            // List View
            "$listview" : $layer.find("dl:first").clone(true),
            // 타이틀
            "$listtitle" : $layer.find("dl:first > dt").clone(true),
            // 리스트 아이템
            "$listitem" : $layer.find("dl:first > dd:first").clone(true),
            // 더보기 버튼
            "$more_btn" : $layer.find("div.btn_area").clone(true)
        };

        // 리스트 삭제
        $layer.empty();

        $('#back_calendar_0').click(function() {
            thisClass.saveData();
            $.mobile.changePage("calendar.html");
        });
        $('#back_calendar_1').click(function() {
            thisClass.saveData();
            $.mobile.changePage("calendar.html");
        });

        // My 설정 버튼
        $('#my_setup').on('click', function() {
            thisClass.saveData();
            if (document.globalObj.LOGIN_DATA.isLogin) {
                $.mobile.changePage("my_setup.html");
            } else {
                document.globalObj.LOGIN_DATA.loginAfterUrl = '../booking/my_setup.html';
                $.mobile.changePage('../member/login.html');
            }
        });

        $("#time_list").on('pageshow', function() {
            var i = 0;
            // 리스트 셋팅
            while (i < thisClass.selectDate.length) {
                thisClass.selectDate[i].curPage = 1;
                thisClass.selectDate[i].totalPage = 1;
                thisClass.selectDate[i].totalCnt = 0;
                thisClass.addList(thisClass.selectDate[i].date);
                i++;
            }

            // 상단 카테고리 셋팅
            if (thisClass.searchArea == 0) {
                var selector = $('#sel_course');
                selector.html('<option value="0">My 설정 지역</option>');
                selector.change();

                // 분류 실시간 예약
                thisClass.getRsvBookingData();
            } else {
                // 초기 골프장 데이터 가져오기
                thisClass.getGolfCourseData(thisClass.searchArea);
            }

            // 상단 텝 초기화
            $("#sel_rsv > option[value = " + thisClass.searchReservation + "]").attr("selected", true);
            $('#sel_rsv').change();
            $("#sel_area > option[value = " + thisClass.searchArea + "]").attr("selected", true);
            $('#sel_area').change();
            $("#sel_course > option[value = " + thisClass.searchCourse + "]").attr("selected", true);
            $('#sel_course').change();

            //  예약 분류 라디오 버튼
            // $('#sel_rsv').click(function() {
            // thisClass.searchReservation = $('#sel_rsv option:selected').val();
            // var searchReservation = thisClass.searchReservation;
            // });

            // 지역 선택 라디오 버튼
            $('#sel_area').click(function() {
                thisClass.searchArea = $('#sel_area option:selected').val();
                var searchArea = thisClass.searchArea;
                var searchReservation = thisClass.searchReservation;
                thisClass.searchCourse = -1;
                var i = 0;
                // 리스트 삭제
                $layer.empty();
                // 리스트 셋팅
                while (i < thisClass.selectDate.length) {
                    thisClass.selectDate[i].curPage = 1;
                    thisClass.selectDate[i].totalPage = 1;
                    thisClass.selectDate[i].totalCnt = 0;
                    thisClass.addList(thisClass.selectDate[i].date);
                    i++;
                }

                if (searchArea == 0) {
                    var selector = $('#sel_course');
                    selector.html('<option value="0">My 설정 지역</option>');
                    selector.change();

                    // 분류 실시간 예약
                    i = 0;
                    while (i < thisClass.selectDate.length) {
                        thisClass.getRsvBookingData(thisClass.selectDate[i].date, thisClass.selectDate[i].curPage, function() {

                        });
                        i++;
                    }
                } else {
                    // 골프장 코스 Selector 초기화
                    $('#sel_course option:first').attr('selected', true);
                    $('#sel_course').change();
                    thisClass.getGolfCourseData(searchArea);
                }
            });

            // 골프장 선택 라디오 버튼
            $('#sel_course').click(function() {
                thisClass.searchCourse = $('#sel_course option:selected').val();

                var i = 0;
                // 리스트 삭제
                $layer.empty();
                // 리스트 셋팅
                while (i < thisClass.selectDate.length) {
                    thisClass.selectDate[i].curPage = 1;
                    thisClass.selectDate[i].totalPage = 1;
                    thisClass.selectDate[i].totalCnt = 0;
                    thisClass.addList(thisClass.selectDate[i].date);
                    i++;
                }

                // 분류 실시간 예약
                i = 0;
                while (i < thisClass.selectDate.length) {
                    thisClass.getRsvBookingData(thisClass.selectDate[i].date, thisClass.selectDate[i].curPage, function() {

                    });
                    i++;
                }
            });
        });
        // end of PageShow Event
    }
};

